2023/12/231794字符

声明

  • 未定义 大多数开发者倾向于 undefined 等同于 undeclared,但在 JS 中他们完全是两码事
var a;  //--> undefined  未定义
// b;  //--> undeclared  未声明

原始值

  • String
var a = 'foo';
var b = ['f', 'o', 'o'];
var c = a.concat('bar');  //--> "foobar"
var d = b.concat(['b', 'a', 'r']);  //--> ["f", "o", "o", "b", "a", "r"]
a.join;  //--> undefined
a.map;  //--> undefined
var c = Array.prototype.join.call(a, '-');  //--> "f-o-o"
var d = Array.prototype.map.call(a, function(v){
    return v.toUpperCase() + '.';  //--> "F.O.O."
}).join('');
  • Number
var a = 42.59;
a.toFixed(3);  //--> "42.590" 指定小数部分显示位数
a.toPrecision(5);  //--> "42.590" 指定有效数字显示位数
42 .toFixed(3);  //--> 42.000 直接调用必须加空格
42..toFixed(3);  //--> 42.000 第一个点会被翻译为小数点的 "."

// ES6检测整数
    Number.isInteger(42);  //--> true
// ES6之前
    if (!Number.isInteger) {
        Number.isInteger = function (num) {
            return typeof num == 'number' && num % 1 == 0;
        }
    }

1 / 0;  //--> Infinity
0 / -3  //--> -3
  • Array
var a = [];
a["13"] = 42;  // 这里的 [] 会产生类型转换
a.length;  //--> 14

引用值

  • 引用值指向同一个地址
var c = [1, 2, 3];
var d = c;  // d 是 [1, 2, 3] 的一个引用
d.push(4);
c; //--> [1, 2, 3, 4]
d; //--> [1, 2, 3, 4]

var a = [1, 2, 3];
var b = a;
a;  //--> [1, 2, 3]
b;  //--> [1, 2, 3]
b = [4, 5, 6];
a;  //--> [1, 2, 3]
b;  //--> [4, 5, 6]
function foo(x){
    x.push(4);
    x = [4, 5, 6];
    x.push(7);
}
var a = [1, 2, 3];
foo(a);
a;  //--> [1, 2, 3, 4]